/* 声明响应函数cb */

const effectStack = [];

// cb：更新用户界面的函数
function effect(cb) {
  // 对函数进行高阶封装
  const rxEffect = function () {
    // 1.捕获异常
    // 2.fn出栈入栈
    // 3.执行fn
    try {
      effectStack.push(rxEffect);
      return cb(); // cb 更新函数
    } finally {
      effectStack.pop();
    }
  };

  // 最初要执行一次,进行最初的依赖收集
  rxEffect();

  return rxEffect;
}
